package entidades;

import java.util.ArrayList;

public class Mision {
    /*
    0-Destruir el ejército azul de ser imposible al jugador de la derecha. 
    1-Destruir al ejército rojo de ser imposible al jugador de la derecha. 
    2-Destruir al ejército negro de ser imposible al jugador de la derecha.
    3-Destruir al ejército amarillo de ser imposible al jugador de la derecha. 
    4-Destruir al ejército verde de ser imposible al jugador de la derecha. 
    5-Destruir al ejército magenta de ser imposible al jugador de la derecha. 
    
    6-Ocupar África, 5 países de América del Norte y 4 países de Europa. 
    7-Ocupar América del Sur, 7 países de Europa y 3 países limítrofes entre sí en cualquier lugar del mapa. 
    8-Ocupar Asia y 2 países de América del Sur. 
    9-Ocupar Europa, 4 países de Asia y 2 países de América de Sur. 
    10-Ocupar América del Norte, 2 países de Oceanía y 4 de Asia. 
    11-Ocupar 2 países de Oceanía, 2 países de África, 2 países de América del Sur, 3 países de Europa, 4 de América del Norte y 3 de Asia. 
    12-Ocupar Oceanía, América del Norte y 2 países de Europa. 
    13-Ocupar América del Sur, África y 5 países de América del Norte. 
     */

    private int id;
    private String color;
    private String descripcion;
    private int[] continentes;
    private int[] condiciones;

    public Mision(int id) {
        this.id = id;
        this.color = "";
        this.descripcion = "";
        this.condiciones = new int[6];

        agregarCondiciones();
    }

    private void agregarCondiciones() {
        switch (id) {
            case 0:
                color = "Azul";
                descripcion = "Destruir el ejército azul de ser imposible al jugador que le sigue.";
                break;
            case 1:
                color = "Rojo";
                descripcion = "Destruir al ejército rojo de ser imposible al jugador que le sigue.";
                break;
            case 2:
                color = "Negro";
                descripcion = "Destruir al ejército negro de ser imposible al jugador que le sigue.";
                break;
            case 3:
                color = "Amarillo";
                descripcion = "Destruir el ejército amarillo de ser imposible al jugador que le sigue.";
                break;
            case 4:
                color = "Verde";
                descripcion = "Destruir el ejército verde de ser imposible al jugador que le sigue.";
                break;
            case 5:
                color = "Magenta";
                descripcion = "Destruir el ejército magenta de ser imposible al jugador que le sigue.";
                break;
            case 6:
                descripcion = "Ocupar África, 5 países de América del Norte y 4 países de Europa.";
                condiciones[1] = 5;
                condiciones[2] = 6;
                condiciones[3] = 4;
                break;
            case 7:
                descripcion = "Ocupar América del Sur, 7 países de Europa y 3 países limítrofes entre sí en cualquier lugar del mapa.";
                condiciones[0] = 6;
                condiciones[3] = 7;
                break;
            case 8:
                descripcion = "Ocupar Asia y 2 países de América del Sur.";
                condiciones[0] = 2;
                condiciones[4] = 15;
                break;
            case 9:
                descripcion = "Ocupar Europa, 4 países de Asia y 2 países de América de Sur.";
                condiciones[0] = 2;
                condiciones[3] = 9;
                condiciones[4] = 4;
                break;
            case 10:
                descripcion = "Ocupar América del Norte, 2 países de Oceanía y 4 de Asia.";
                condiciones[1] = 10;
                condiciones[4] = 4;
                condiciones[5] = 2;
                break;
            case 11:
                descripcion = "Ocupar 2 países de Oceanía, 2 países de África, 2 países de América del Sur, 3 países de Europa, 4 de América del Norte y 3 de Asia.";
                condiciones[0] = 2;
                condiciones[1] = 4;
                condiciones[2] = 2;
                condiciones[3] = 3;
                condiciones[4] = 3;
                condiciones[5] = 4;
                break;
            case 12:
                descripcion = "Ocupar Oceanía, América del Norte y 2 países de Europa.";
                condiciones[1] = 10;
                condiciones[3] = 2;
                condiciones[5] = 4;
                break;
            case 13:
                descripcion = "Ocupar América del Sur, África y 5 países de América del Norte.";
                condiciones[0] = 6;
                condiciones[1] = 5;
                condiciones[2] = 6;
                break;
        }
    }

    public String getDescripcion() {
        return this.descripcion;
    }

    void actualizarContadorPais(Pais p) {
        continentes[p.getIdContinente()]++;
    }

    public void verficarExistenciaColor(ArrayList<Jugador> jugadores, int idJugador) {
        int idSiguiente = idJugador + 1;
        if (idSiguiente == jugadores.size()) {
            idSiguiente = 0;
        }
        boolean correcto = false;
        if (jugadores.get(idJugador).getColor().compareTo(color) != 0) {
            for (int i = 0; i < jugadores.size(); i++) {
                if (jugadores.get(i).getColor().compareTo(color) == 0) {
                    correcto = true;
                    break;
                }
            }
        }
        if (!correcto) {
            color = jugadores.get(idSiguiente).getColor();
        }
    }

    public boolean isCumplida(Pais pDefiende) {
        boolean respuesta = false;
        continentes[pDefiende.getIdContinente()]++;
        if (id < 6) {
            if (color.compareTo(pDefiende.getConquistador().getColor()) == 0 && pDefiende.getConquistador().getCantidadPaises() == 1) {
                respuesta = true;
            }
        } else {
            respuesta = true;
            for (int i = 0; i < condiciones.length; i++) {
                if (continentes[i] < condiciones[i]) {
                    respuesta = false;
                    break;
                }
            }
        }
        return respuesta;
    }

    public boolean isCumplida() {
        boolean respuesta = false;
        if (id >= 6) {
            respuesta = true;
            for (int i = 0; i < condiciones.length; i++) {
                if (continentes[i] < condiciones[i]) {
                    respuesta = false;
                    break;
                }
            }
        }
        return respuesta;
    }

    void addListaContinentes(int[] continentes) {
        this.continentes = continentes;
    }

    //Virtual
    public int getId() {
        return this.id;
    }

    public int[] getFaltanParaCondiciones() {

        int[] faltan = new int[condiciones.length];
        for (int i = 0; i < condiciones.length; i++) {
            faltan[i] = this.condiciones[i] - this.continentes[i];
        }
        return faltan;
    }

    public String getColor() {
        return color;
    }

    public void verficarExistenciaColor(ArrayList<Jugador> jugadores, String idJugador) {
        throw new UnsupportedOperationException("Not yet implemented");
    }
}